< prev index next >

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

Print this page
rev 50902 : imported patch 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,33 **** * 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; --- 23,34 ---- * questions. */ package com.sun.tools.javac.comp; ! import java.util.ArrayDeque; ! import java.util.Queue; 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;
*** 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; } } --- 520,546 ---- * 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 >