< prev index next >

src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Analyzer.java

Print this page
rev 50962 : [mq]: 8206122-Use-Queue-in-place-of-ArrayList-when-need-to-remove-first-element

*** 1,7 **** /* ! * Copyright (c) 2014, 2017, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2014, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 23,37 **** * questions. */ package com.sun.tools.javac.comp; ! import java.util.ArrayList; import com.sun.source.tree.LambdaExpressionTree; import com.sun.tools.javac.code.Source; import com.sun.tools.javac.code.Source.Feature; import com.sun.tools.javac.code.Type; import com.sun.tools.javac.code.Types; import com.sun.tools.javac.comp.ArgumentAttr.LocalCacheContext; import com.sun.tools.javac.resources.CompilerProperties.Warnings; import com.sun.tools.javac.tree.JCTree; --- 23,46 ---- * questions. */ package com.sun.tools.javac.comp; ! import java.util.ArrayDeque; ! import java.util.EnumSet; ! import java.util.HashMap; ! import java.util.Map; ! import java.util.Queue; ! import java.util.function.Predicate; import com.sun.source.tree.LambdaExpressionTree; + import com.sun.source.tree.NewClassTree; + import com.sun.tools.javac.code.Flags; + import com.sun.tools.javac.code.Kinds.Kind; import com.sun.tools.javac.code.Source; import com.sun.tools.javac.code.Source.Feature; + import com.sun.tools.javac.code.Symbol.ClassSymbol; import com.sun.tools.javac.code.Type; import com.sun.tools.javac.code.Types; import com.sun.tools.javac.comp.ArgumentAttr.LocalCacheContext; import com.sun.tools.javac.resources.CompilerProperties.Warnings; import com.sun.tools.javac.tree.JCTree;
*** 46,87 **** import com.sun.tools.javac.tree.JCTree.JCMethodDecl; import com.sun.tools.javac.tree.JCTree.JCMethodInvocation; import com.sun.tools.javac.tree.JCTree.JCNewClass; import com.sun.tools.javac.tree.JCTree.JCStatement; import com.sun.tools.javac.tree.JCTree.JCSwitch; import com.sun.tools.javac.tree.JCTree.JCTypeApply; import com.sun.tools.javac.tree.JCTree.JCVariableDecl; import com.sun.tools.javac.tree.JCTree.JCWhileLoop; import com.sun.tools.javac.tree.JCTree.Tag; import com.sun.tools.javac.tree.TreeCopier; import com.sun.tools.javac.tree.TreeInfo; import com.sun.tools.javac.tree.TreeMaker; import com.sun.tools.javac.tree.TreeScanner; import com.sun.tools.javac.util.Context; import com.sun.tools.javac.util.DefinedBy; import com.sun.tools.javac.util.DefinedBy.Api; import com.sun.tools.javac.util.JCDiagnostic.DiagnosticType; import com.sun.tools.javac.util.List; import com.sun.tools.javac.util.ListBuffer; import com.sun.tools.javac.util.Log; import com.sun.tools.javac.util.Options; import com.sun.tools.javac.util.Position; - import java.util.EnumSet; - import java.util.HashMap; - import java.util.Map; - import java.util.function.Predicate; - - import com.sun.source.tree.NewClassTree; - import com.sun.tools.javac.code.Flags; - import com.sun.tools.javac.code.Kinds.Kind; - import com.sun.tools.javac.code.Symbol.ClassSymbol; - import com.sun.tools.javac.tree.JCTree.JCTry; - import com.sun.tools.javac.tree.JCTree.JCUnary; - import com.sun.tools.javac.util.Assert; - import com.sun.tools.javac.util.DiagnosticSource; - import static com.sun.tools.javac.code.Flags.GENERATEDCONSTR; import static com.sun.tools.javac.code.TypeTag.CLASS; import static com.sun.tools.javac.tree.JCTree.Tag.APPLY; import static com.sun.tools.javac.tree.JCTree.Tag.FOREACHLOOP; import static com.sun.tools.javac.tree.JCTree.Tag.LABELLED; --- 55,86 ---- import com.sun.tools.javac.tree.JCTree.JCMethodDecl; import com.sun.tools.javac.tree.JCTree.JCMethodInvocation; import com.sun.tools.javac.tree.JCTree.JCNewClass; import com.sun.tools.javac.tree.JCTree.JCStatement; import com.sun.tools.javac.tree.JCTree.JCSwitch; + import com.sun.tools.javac.tree.JCTree.JCTry; import com.sun.tools.javac.tree.JCTree.JCTypeApply; + import com.sun.tools.javac.tree.JCTree.JCUnary; import com.sun.tools.javac.tree.JCTree.JCVariableDecl; import com.sun.tools.javac.tree.JCTree.JCWhileLoop; import com.sun.tools.javac.tree.JCTree.Tag; import com.sun.tools.javac.tree.TreeCopier; import com.sun.tools.javac.tree.TreeInfo; import com.sun.tools.javac.tree.TreeMaker; import com.sun.tools.javac.tree.TreeScanner; + import com.sun.tools.javac.util.Assert; import com.sun.tools.javac.util.Context; import com.sun.tools.javac.util.DefinedBy; import com.sun.tools.javac.util.DefinedBy.Api; + import com.sun.tools.javac.util.DiagnosticSource; import com.sun.tools.javac.util.JCDiagnostic.DiagnosticType; import com.sun.tools.javac.util.List; import com.sun.tools.javac.util.ListBuffer; import com.sun.tools.javac.util.Log; import com.sun.tools.javac.util.Options; import com.sun.tools.javac.util.Position; import static com.sun.tools.javac.code.Flags.GENERATEDCONSTR; import static com.sun.tools.javac.code.TypeTag.CLASS; import static com.sun.tools.javac.tree.JCTree.Tag.APPLY; import static com.sun.tools.javac.tree.JCTree.Tag.FOREACHLOOP; import static com.sun.tools.javac.tree.JCTree.Tag.LABELLED;
*** 519,545 **** * Simple deferral handler. All tasks belonging to the same outermost class are added to * the same queue. The queue is flushed after flow analysis (only if no error occurred). */ DeferredAnalysisHelper queueDeferredHelper = new DeferredAnalysisHelper() { ! Map<ClassSymbol, ArrayList<RewritingContext>> Q = new HashMap<>(); @Override public void queue(RewritingContext rewriting) { ! ArrayList<RewritingContext> s = Q.computeIfAbsent(rewriting.env.enclClass.sym.outermostClass(), k -> new ArrayList<>()); s.add(rewriting); } @Override public void flush(Env<AttrContext> flushEnv) { if (!Q.isEmpty()) { DeferredAnalysisHelper prevHelper = deferredAnalysisHelper; try { deferredAnalysisHelper = flushDeferredHelper; ! ArrayList<RewritingContext> rewritings = Q.get(flushEnv.enclClass.sym.outermostClass()); while (rewritings != null && !rewritings.isEmpty()) { ! doAnalysis(rewritings.remove(0)); } } finally { deferredAnalysisHelper = prevHelper; } } --- 518,544 ---- * Simple deferral handler. All tasks belonging to the same outermost class are added to * the same queue. The queue is flushed after flow analysis (only if no error occurred). */ DeferredAnalysisHelper queueDeferredHelper = new DeferredAnalysisHelper() { ! Map<ClassSymbol, Queue<RewritingContext>> Q = new HashMap<>(); @Override public void queue(RewritingContext rewriting) { ! Queue<RewritingContext> s = Q.computeIfAbsent(rewriting.env.enclClass.sym.outermostClass(), k -> new ArrayDeque<>()); s.add(rewriting); } @Override public void flush(Env<AttrContext> flushEnv) { if (!Q.isEmpty()) { DeferredAnalysisHelper prevHelper = deferredAnalysisHelper; try { deferredAnalysisHelper = flushDeferredHelper; ! Queue<RewritingContext> rewritings = Q.get(flushEnv.enclClass.sym.outermostClass()); while (rewritings != null && !rewritings.isEmpty()) { ! doAnalysis(rewritings.remove()); } } finally { deferredAnalysisHelper = prevHelper; } }
< prev index next >